Direct memory access (DMA) allows data to be sent to or received from a computer's memory without the computer's microprocessor being involved with the data transfer. This allows the speed and bandwidth of the data transfer process to be increased. For some types of data transfers, DMA engines may be used to perform the data transfer process. However, input from the computer's microprocessor may still be required to provide the parameters for programming the DMA engine, such as a start address and transfer length. There are some applications like compression/decompression, encryption/decryption and search algorithms in which the transfer length is unknown at the beginning of the transfer. These kinds of transfers are generally broken into multiple DMA transfers of a known length, slowing down the overall transfer process.
During the DMA transfer, the computer's microprocessor may also still be involved to determine when the DMA engine completes the transfer. For example, the DMA engine may write to a register when it completes the transfer and the microprocessor may need to continuously poll the register to determine when the transfer is complete. Alternatively, the DMA engine may send an interrupt to the microprocessor upon completion letting it know that the transfer is complete. For multiple DMA transfers, the time to execute the transfer is lengthened due to the microprocessor's recurring involvement upon the completion of each individual transfer.